package br.com.jsfprimefaces.managerBean;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.servlet.annotation.WebServlet;

import br.com.jsfprimefaces.dao.FilmeDAO;
import br.com.jsfprimefaces.model.Filme;
						 
/*@WebServlet( name="PesquisaMB",value="/Pesquisa", urlPatterns="/pesquisa")*/
@WebServlet(urlPatterns="/pesquisa")
@ManagedBean(name = "PesquisaMB")
@ViewScoped

public class PesquisaMbean implements Serializable {

	private static final long serialVersionUID = 1L;

	private int id;
	private String nome;
	private String nomeOriginal;
	private String genero;
	private int duracao;
	private String status;
	private int ano;
	private List<Filme> filme;
	private Filme movie;
	
	 
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Filme getMovie() {
		if(movie == null){
			movie = new Filme();
		}
		return movie;
	}

	public void setMovie(Filme movie) {
		this.movie = movie;
	}

	public List<Filme> getFilme() {
		return filme;
	}

	public void setFilme(List<Filme> filme) {
		this.filme = filme;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		
		this.nome = nome.toUpperCase();
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero.toUpperCase();
	}

	public int getDuracao() {
		return duracao;
	}

	public void setDuracao(int duracao) {
		this.duracao = duracao;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status.toUpperCase();
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public String getNomeOriginal() {
		return nomeOriginal;
	}

	public void setNomeOriginal(String nomeOriginal) {
		this.nomeOriginal = nomeOriginal.toUpperCase();
	}

	public String carregaBuscar() {
		setNullAll();
		return "/page/pesquisar.xhtml";
	}
	
	public List<Filme> remove(Filme f) {
		String nome = f.getNome();
		FilmeDAO filmeDAO = new FilmeDAO();
		filmeDAO.delete(f);
		System.out.println(" - DELETE FEITO COM SUCESSO! - ");

		return filme;
	}
	
	public List<Filme> busca(String nome) {
		filme = null;
		if (!(nome.isEmpty())) {
			FilmeDAO filmeDAO = new FilmeDAO();
			filme = filmeDAO.searchByName(nome.toUpperCase());
			return filme;
		}
		
		return null;
	}
	
	public List<Filme> buscaName(String nome) {
		filme = null;
		if (!(nome.isEmpty())) {
			FilmeDAO filmeDAO = new FilmeDAO();
			filme = filmeDAO.searchName(nome.toUpperCase());
			return filme;
		}
		
		return null;
	}
	
	public List<Filme> buscaById(int id) {
		FilmeDAO filmeDAO = new FilmeDAO();
		filme = filmeDAO.searchById(id);
		return filme;
	}
	
	
	public Filme buscaId(String f) {
		FilmeDAO filmeDAO = new FilmeDAO();
		
		movie = new Filme();
		for (Filme m : filmeDAO.searchByName(f)) {
			movie.setId(m.getId());
			movie.setNome(m.getNome());
			movie.setNomeOriginal(m.getNomeOriginal());
			movie.setDuracao(m.getDuracao());
			movie.setGenero(m.getGenero());
			movie.setAno(m.getAno());
			movie.setStatus(m.getStatus());
		}
		
		System.out.println("Nome: "+movie.getNome()+"\nObjeto = "+movie);
		
		return movie;
	}
	
	public Filme buscaId(Filme f) {
		FilmeDAO filmeDAO = new FilmeDAO();
		
		movie = new Filme();
		for (Filme m : filmeDAO.searchById(f)) {
			movie.setId(m.getId());
			movie.setNome(m.getNome());
			movie.setNomeOriginal(m.getNomeOriginal());
			movie.setDuracao(m.getDuracao());
			movie.setGenero(m.getGenero());
			movie.setAno(m.getAno());
			movie.setStatus(m.getStatus());
		}
		
		System.out.println("Nome: "+movie.getNome()+"\nObjeto = "+movie);
		
		return movie;
	}
	
	public List<Filme> edita(){
		
		System.out.println(" /editar");
		System.out.println("----------");
		System.out.println("Nome : " + movie.getNome());
		System.out.println("Nome Original: " + movie.getNomeOriginal());
		System.out.println("Genero : " + movie.getGenero());
		System.out.println("Duracao : " + movie.getDuracao());
		System.out.println("Ano : " + movie.getAno());
		System.out.println("Status : " + movie.getStatus());
		System.out.println("----------\n");
		
		Filme filmes = new Filme();

		filmes.setId(movie.getId());
		filmes.setNome(movie.getNome().toUpperCase());
		filmes.setNomeOriginal(movie.getNomeOriginal().toUpperCase());
		filmes.setGenero(movie.getGenero());
		filmes.setDuracao(movie.getDuracao());
		filmes.setAno(movie.getAno());
		filmes.setStatus(movie.getStatus());

		FilmeDAO filmeDAO = new FilmeDAO();
		filmeDAO.update(filmes);
		System.out.println(" - UPDATE FEITO COM SUCESSO! - ");
		filme =  filmeDAO.searchAll();
		return filme;
	}
	
	public List<Filme> editaPesquisa(){
		
		System.out.println(" /editar");
		System.out.println("----------");
		System.out.println("Nome : " + movie.getNome());
		System.out.println("Nome Original: " + movie.getNomeOriginal());
		System.out.println("Genero : " + movie.getGenero());
		System.out.println("Duracao : " + movie.getDuracao());
		System.out.println("Ano : " + movie.getAno());
		System.out.println("Status : " + movie.getStatus());
		System.out.println("----------\n");
		
		Filme filmes = new Filme();

		filmes.setId(movie.getId());
		filmes.setNome(movie.getNome().toUpperCase());
		filmes.setNomeOriginal(movie.getNomeOriginal().toUpperCase());
		filmes.setGenero(movie.getGenero());
		filmes.setDuracao(movie.getDuracao());
		filmes.setAno(movie.getAno());
		filmes.setStatus(movie.getStatus());

		FilmeDAO filmeDAO = new FilmeDAO();
		filmeDAO.update(filmes);
		System.out.println(" - UPDATE FEITO COM SUCESSO! - ");
		filme =  filmeDAO.searchById(filmes);
		return filme;
	}
	
	public void setNullAll(){
		nome = "";
		nomeOriginal = "";
		genero = "";
		status = "";
		id = 0;
		duracao = 0;
		ano = 0;
		filme = null;
		movie = null;
	}
	
}
